/*
 Language: Erlang REPL
 Author: Sergey Ignatov <sergey@ignatov.spb.su>
 */

function(hljs) {
  return {
    defaultMode: {
      keywords: {
        special_functions:
          'spawn spawn_link self',
        reserved:
          'after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if ' +
          'let not of or orelse|10 query receive rem try when xor'
      },
      contains: [
        {
          className: 'input_number', begin: '^[0-9]+> ',
          relevance: 10
        },
        {
          className: 'comment',
          begin: '%', end: '$'
        },
        {
          className: 'number',
          begin: '\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)',
          relevance: 0
        },
        hljs.APOS_STRING_MODE,
        hljs.QUOTE_STRING_MODE,
        {
          className: 'constant', begin: '\\?(::)?([A-Z]\\w*(::)?)+'
        },
        {
          className: 'arrow', begin: '->'
        },
        {
          className: 'ok', begin: 'ok'
        },
        {
          className: 'exclamation_mark', begin: '!'
        },
        {
          className: 'function_or_atom',
          begin: '(\\b[a-z\'][a-zA-Z0-9_\']*:[a-z\'][a-zA-Z0-9_\']*)|(\\b[a-z\'][a-zA-Z0-9_\']*)',
          relevance: 0
        },
        {
          className: 'variable',
          begin: '[A-Z][a-zA-Z0-9_\']*',
          relevance: 0
        }
      ]
    }
  };
}
